package exercises.leetcode;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * <a href="https://leetcode-cn.com/problems/destination-city/">
 * 1436. 旅行终点站</a>
 *
 * <p><span color="#87CEEB">描述:</span>
 * 给你一份旅游线路图，该线路图中的旅行线路用数组 paths 表示，其中 paths[i] = [cityAi, cityBi] 表示该线路将会从 cityAi 直接前往 cityBi 。请你找出这次旅行的终点站，即没有任何可以通往其他城市的线路的城市。
 * <p>
 * 题目数据保证线路图会形成一条不存在循环的线路，因此恰有一个旅行终点站。
 * <p>
 *  
 * <p>
 * 示例 1：
 * <p>
 * 输入：paths = [["London","New York"],["New York","Lima"],["Lima","Sao Paulo"]]
 * <p>
 * 输出："Sao Paulo"
 * <p>
 * 解释：从 "London" 出发，最后抵达终点站 "Sao Paulo" 。本次旅行的路线是 "London" -> "New York" -> "Lima" -> "Sao Paulo" 。
 * <p>
 * 示例 2：
 * <p>
 * 输入：paths = [["B","C"],["D","B"],["C","A"]]
 * <p>
 * 输出："A"
 * <p>
 * 解释：所有可能的线路是：
 * "D" -> "B" -> "C" -> "A". 
 * "B" -> "C" -> "A". 
 * "C" -> "A". 
 * "A". 
 * 显然，旅行终点站是 "A" 。
 * <p>
 * 示例 3：
 * <p>
 * 输入：paths = [["A","Z"]]
 * <p>
 * 输出："Z"
 * <p>
 * 提示：
 * <li>1 <= paths.length <= 100</li>
 * <li>paths[i].length == 2</li>
 * <li>1 <= cityAi.length, cityBi.length <= 10</li>
 * <li>cityAi != cityBi</li>
 * <li>所有字符串均由大小写英文字母和空格字符组成。</li>
 *
 * @author or2
 * @date 2021年10月01日 时间: 9:32
 */
public class No1436 {
    public String destCity(List<List<String>> paths) {
        Set<String> set = new HashSet<>();
        paths.forEach(list -> set.add(list.get(0)));
        for (int i = 0; i < paths.size(); i++)
            if (!set.contains(paths.get(i).get(1)))
                return paths.get(i).get(1);
        return null;
    }
}
